/**
 * 偏函数
 * **/

function buildUri(scheme, domain, path){
    return `${scheme}://${domain}/${path}`
}

// 实现一个偏函数， 该函数的第一个形参为需要转换的原函数
// 其他形参为需要固定的参数，可以是一个或者多个
function partial(fn){
    // 1. 获取除了第一个参数外的其他参数
    var args = [].slice.call(arguments, 1)
    console.log(args) //[ 'http', 'localhost' ]
    // 2. 返回一个接收其它参数的函数
    return function(){
        // 3. 合并固定参数和新的参数
        args = [].concat.apply(args, [].slice.apply(arguments))
        console.log(args) //[ 'http', 'localhost', 'index.html' ]
        // 4. 执行原函数， 并返回结果
        return fn.apply(this, args) //http://localhost/index.html
    }
}

var url = partial(buildUri, 'http', 'localhost')('index.html')
console.log(url)